/**
通信机制channel
默认情况下，channel接收和发送数据都是阻塞的，除非另一端已经准备好，
这样就使得Goroutines同步变的更加的简单，而不需要显式的lock。
2018/8/16
wgg
*/
package main

import "fmt"

func sum(a []int, c chan int)  {
	total := 0
	for _,v := range a{
		total += v
	}
	c <- total
}

func main() {
	a := []int{7,2,8,-9,4,0}

	c := make(chan int)
	go sum(a[:len(a)/2],c)
	go sum(a[len(a)/2:],c)
	x,y := <-c, <-c

	fmt.Println(x,y,x+y)
}
